#ifndef MESSAGE_H
#define MESSAGE_H

#include <QByteArray>
#include <QDataStream>

struct Message {
	enum class Type {
		WORKER_REGISTER,
		WORKER_UNREGISTER,
		ALL_JOBS_ABORT,
		JOB_REQUEST,
		JOB_RESULT,
	};

	Message(const Type type = Type::WORKER_REGISTER, const QByteArray& data = QByteArray()) : type(type), data(data)
	{
	}

	~Message() {}

	Type type;
	QByteArray data;
};

inline QDataStream & operator<<(QDataStream& out, const Message &message)
{
	out << static_cast<qint8>(message.type)
		<< message.data;
	return out;
}

inline QDataStream & operator>>(QDataStream & in, Message &message)
{
	qint8 type;

	in >> type;
	in >> message.data;

	message.type = static_cast<Message::Type>(type);
	return in;
}

#endif
